#pragma once
#include "5_common.hpp"

// 由服务器 来创建文件和删除文件
class Server_init
{
public:
    Server_init()
    {
        umask(0); // 把掩码清零m
        int n = ::mkfifo(_s.c_str(), _mode);
        if (n < 0) // 文件创建失败
        {
            std::cerr << "mkfifo error!" << std::endl;
            return; // 打开失败 直接退出
        }
        std::cout << "mkfifo successful!" << std::endl; // 文件创建成功
        sleep(2);
    }
    ~Server_init()
    {
        int n = ::unlink(_s.c_str());
        if (n < 0)
        {
            std::cerr << "unlink error!" << std::endl;
        }
        std::cout << "unlink successful!" << std::endl; // 文件创建成功
    }
};

Server_init _i;

class Server
{
public:
    // 编码习惯（1）string* 表示输出型参数
    // （2）const string&  输入形参数
    // （3）string& 输入输出型参数
    Server()
    {
        _fd = _deafd;
    }
    // bool ServerOpenPipe()
    // {
    //     _fd = open(_s.c_str(), O_RDONLY);
    //     if (_fd < 0) // 打开文件失败
    //     {
    //         std::cerr << "文件打开 失败！" << std::endl;
    //         return false;
    //     }
    //     return true; // 打开 文件成功
    // }

    bool ServerOpenPipe()
    {
        int _fd = OpenPipe(_forread);
        if (_fd < 0)
        {
            return false;
        }
        else
            return true;
    }

    int ServerReadPipe(std::string *_s) // 从管道里面读取数据
    {
        char _arr[_pslsize];
        ssize_t _n = read(_fd, _arr, sizeof(_arr) - 1); // 失败了返回-1
        if (_n > 0)                                     // 读取失败
        {
            _arr[_n] = 0;
            *_s = _arr; // 让内容等于数组内容 让读出来的信息 存到一个string参数里面
        }
        return _n;
    }
    void ServerClosePipe()
    {
        ClosePipe(_fd);
    }
    ~Server()
    {
    }

private:
    int _fd;
};
